package com.atguigu.srb.core.listener;

import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.atguigu.srb.core.mapper.DictMapper;
import com.atguigu.srb.core.pojo.entity.Dict;
import com.atguigu.srb.core.pojo.entity.excel.DictExcelData;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
//@Component
public class DictExcelDataListener extends AnalysisEventListener<DictExcelData> {
    private Integer limit = 30;
    private List<DictExcelData> dicts = new ArrayList<>();
    //组件类的自动装配，只有容器创建它的对象时才会触发
    //自动装配必须在容器管理的组件类中使用
//    @Resource
    DictMapper dictMapper;

    public DictExcelDataListener(DictMapper baseMapper) {
        this.dictMapper = baseMapper;
    }

    @Override
    public void invoke(DictExcelData data, AnalysisContext context) {
        //判断dicts中的数据是否已存在，如果已存在 不添加到集合中
        if(checkedData(data)){//返回true表示数据库中已存在
            return;
        }
        dicts.add(data);
        if(dicts.size()>=limit){
            //批量保存到数据库中
            //自定义sql
            //将dicts转为 Dict类的对象集合 并手动设置新增和更新的时间
            dictMapper.batchInsert(dicts);
            //清空缓存的集合
            dicts.clear();
        }
    }



    /**
     * 判断data元素是否数据库中已存在 如果已存在返回true，否则返回false
     * @param data
     * @return
     */
    private boolean checkedData(DictExcelData data) {
        // 如果
        return dictMapper.selectCount(Wrappers.lambdaQuery(Dict.class)
                .eq(Dict::getId , data.getId()))>0;
    }

    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {
        if(dicts.size()>0){
            dictMapper.batchInsert(dicts);
            //清空缓存的集合
            dicts.clear();
        }
    }
}
